<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>单例模式</title>
  </head>
  <body>
    <script>
      /*
       * 1.单例模式：保证一个类仅有一个实例，并提供一个访问它的全局访问点
       * 2.创建方法：
       *   使用一个变量来标志当前是否已经为某个类创建过对象,如果创建了,则在下一次获取该类的实例时,直接返回之前创建的对象；
       *   否则就创建一个对象。这就确保了一个类只有一个实例对象
       * 3.应用：登录框
       */

      let Singleton = function (name) {
        this.name = name;
      };

      Singleton.prototype.getName = function () {
        console.log(this.name);
      };

      //单例函数--采用闭包封装, 立即执行函数
      Singleton.getInstance = (function () {
        let instance = null;
        return function (arguments) {
          if (!instance) {
            instance = new Singleton(arguments);
          }
          return instance;
        };
      })();

      let a = Singleton.getInstance("张三");
      let b = Singleton.getInstance("张四");
      console.log(a);  //Singleton {name: "张三"}
      console.log(b);  //Singleton {name: "张三"}
      console.log(a === b); //true
    </script>
  </body>
</html>
